﻿using System;
using AccesoDatos.DTO.Base;
using AccesoDatos.DTO;
using AccesoDatos.DAO;


namespace AccesoDatos.DAO.Base
{
    public class Factoria
    {
        /// <summary>
        /// Funcion que dependiendo del objeto dto que deseamos, instancia un determinado dao
        /// </summary>
        /// <param name="dto">Parametro que determinara que objeto DAO instanciar</param>
        /// <returns>Objeto DAO instanciado</returns>
        public static IDAO GetDAO(IDTO dto)
        {

            if (dto is AlumnoDTO)
            {
                return AlumnoDAO.GetInstance();
            }
            if (dto is AsignaturaDTO)
            {
                return AsignaturaDAO.GetInstance();
            }
            if (dto is ClaseDTO)
            {
                return ClaseDAO.GetInstance();
            }
            if (dto is ConvocatoriaDTO)
            {
                return ConvocatoriaDAO.GetInstance();
            }
            if (dto is RenglonDTO)
            {
                return RenglonDAO.GetInstance();
            }
            if (dto is RenglonDocumentacionDTO)
            {
                return RenglonDocumentacionDAO.GetInstance();
            }
            if (dto is MensajeDTO) 
            {
                return AccesoDatos.DAO.MensajeDAO.GetInstance();
            }
            if (dto is AlumnoAsignaturaDTO)
            {
                return AccesoDatos.DAO.AlumnoAsignaturaDAO.GetInstance();
            }
            if (dto is DocumentacionReqEntregaDTO) 
            {
                return AccesoDatos.DAO.DocumentacionReqEntregaDAO.GetInstance();
            }
            if (dto is DocumentacionReqDTO)
            {
                return AccesoDatos.DAO.DocumentacionReqDAO.GetInstance();
            }
            if (dto is PersonaDTO)
            {
                return PersonaDAO.GetInstance();
            }
            if (dto is TitulacionDTO) 
            {
                return TitulacionDAO.GetInstance();
            }
            else if (dto is ProfesorDTO)
            {
                return ProfesorDAO.GetInstance();
            }
            throw new NotDefinedObjetoDTO();
        }
    }
}